package org.qqcui.designpattern.patterns.singleton.lazy;

/**
 * 懒汉式，写法一，虽然能够实现懒加载的效果，但是在多线程环境下不安全，在生产环境不能使用
 *
 * @author cuiqingqiang
 * @version 1.0
 * @date 2020-10-16 21:41
 **/
public class SingletonTest03 {
	public static void main(String[] args) {
		System.out.println("饿懒汉写法一，线程不安全方式");
		Singleton3 instance1 = Singleton3.getInstance();
		Singleton3 instance2 = Singleton3.getInstance();
		System.out.println(instance1 == instance2); // true

		System.out.println("instance1.hashCode=" + instance1.hashCode());
		System.out.println("instance2.hashCode=" + instance2.hashCode());
	}
}

/**
 * 懒汉式单例实现方式一
 * 1.私有的构造方法，防止通过new创建实例
 * 2.私有的静态成员变量
 * 3.在公共获取实例的方法中检查成员变量并进行初始化
 */
class Singleton3 {
	private static Singleton3 instance;

	private Singleton3() {

	}

	public static Singleton3 getInstance() {
		// 线程不安全，此处判断为null的时候，多线程下不安全，会导致多个实例创建出来
		if (instance == null) {
			instance = new Singleton3();
		}
		return instance;
	}
}